#![allow(dead_code)]

use anyhow::{Ok, Result};
use serde::{Deserialize, Serialize};

/// 获取股票数据列表
/// <br/> pn 当前页
/// <br/> pz 页条数
pub async fn get_stock_page(pn: i64, pz: i64) -> Result<StockResult> {
    let fileds = "f2,f3,f4,f5,f6,f9,f10,f11,f12,f13,f14,f15,f16,f17,f18,f20,f21,f22,f23,f24,f25";
    let url=format!("https://46.push2.eastmoney.com/api/qt/clist/get?pn={}&pz={}&po=1&np=1&fltt=2&invt=2&wbp2u=|0|0|0|web&fid=f3&fs=m:0+t:6,m:0+t:80,m:1+t:2,m:1+t:23,m:0+t:81+s:2048&fields={}", pn,pz,fileds);

    let response = reqwest::get(url)
        .await
        .unwrap()
        .json::<StockResult>()
        .await
        .unwrap();

    Ok(response)
}

#[derive(Deserialize, Serialize, Debug)]
pub struct StockResult {
    pub data: StockData,
}

#[derive(Deserialize, Serialize, Debug)]
pub struct StockData {
    pub diff: Vec<StockItem>,
    pub total: i64,
}

#[derive(Deserialize, Serialize, Debug)]
pub struct StockItem {
    /// 最新价/元
    pub f2: serde_json::Value,
    /// 涨跌幅/%
    // pub f3: f64,
    /// 涨跌额/元
    // pub f4: f64,
    /// 成交量/股
    // pub f5: i64,
    /// 成交额/元
    // pub f6: f64,
    /// 市盈率（动态）
    // pub f9: f64,
    /// 量比
    // pub f10: f64,
    /// 5分钟涨跌
    // pub f11: f64,
    /// 股票代码
    pub f12: String,
    /// 股票名称
    pub f14: String,
    // / 最高价/元
    // pub f15: f64,
    // / 最低价/元
    // pub f16: f64,
    // / 今天开盘价/元
    // pub f17: f64,
    // / 昨天收盘价/元
    // pub f18: f64,
    // / 总市值/元
    // pub f20: f64,
    // / 流通市值/元
    // pub f21: f64,
    // / 涨速/%
    // pub f22: f64,
    // / 市净率
    // pub f23: f64,
    // / 60日涨跌幅/%
    // pub f24: f64,
    // / 年初至今涨跌幅/%
    // pub f25: f64,
}

#[cfg(test)]
mod stock_test {
    use super::*;
    use core::result::Result::Ok;
    use tokio::test;

    #[test]
    async fn get_stock_page_test() {
        match get_stock_page(1, 2).await {
            Ok(res) => println!("{:?}", res),
            Err(err) => println!("{:?}", err),
        }
    }
}
